package Conter;

import RTPower.RTSocket;
import java.io.OutputStream;
import lottery.StartGet;
import server.ScanServerData;

/*
 * ==================================================
 * 项目开发者：JerryStark
 * 开发者Email：4771007@qq.com
 * 开发者QQ:4771007
 * 开发范围：web，wap，android,ios,osx or win or linux 应用
 * ==================================================
 */
/**
 * 启动类
 *
 * @author jerry
 */
public class Main {

    /**
     * 后台程序主线程
     */
    public static RTSocket rTSocket;

    /**
     * 根据传入参数决定是面板还是后台监听端口执行
     *
     * @param args -start 端口监听执行 空打开面板
     */
    public static void main(String[] args) {

        System.out.println("配置:+++配置文件开始初始化并加载+++");
        //配置文件遍历扫描
        Config.Format();

        //如果有参数传入,第一个是-start则服务模式启动
        if (args.length > 0) {
            if (args[0].equals("-start")) {

                //开启端口监听
                StartSocket();
//                return;
            }
        }

        //启动独立线程开始循环抓取结果
        StartAllGameGet();

        //否则就打开控制面板
        new ConterMain().setVisible(true);
    }

    /**
     * 开始运行端口监听
     */
    private static void StartSocket() {
        System.out.println("端口监听:服务模式启动");
        rTSocket = new RTSocket() {

            @Override
            public String ServerBackMsg(OutputStream writer, StringBuilder inputstring) {

                String Message = new ScanServerData().Start(inputstring);

                String errorMessage = "HTTP/1.1 200 OK\r\n"
                        + "Content-Type: text/html\r\n"
                        + "\r\n"
                        + "" + Message + "";

                return errorMessage;

            }
        };

        rTSocket.ServerPort = Config.MainConfig.get("ServerPort").getAsInt();
        rTSocket.StartServer();
    }

    /**
     * 开启大类型的游戏抓取进程
     * <br>仅仅启动,控制由config的总开关来控制是否关闭
     */
    public static void StartAllGameGet() {
        Thread gamethread = new Thread(() -> {

            System.out.println("彩票抓取:+++启动彩票类型游戏抓取+++");
            //单独调用彩票和球类的启动抓取
            //执行彩票的抓取,新的线程执行,然后每个游戏也是一次独立线程
            new StartGet().Start();

            //这里启动球类,预留
        });
        gamethread.setName("AllGameGet");
        gamethread.start();
    }

}
